package com.gsbelarus.gedemin.income.fragment;

import android.content.Intent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;

import com.gsbelarus.gedemin.income.table.ClientsTable;
import com.gsbelarus.gedemin.income.R;
import com.gsbelarus.gedemin.income.activity.ClientMonth;
import com.gsbelarus.gedemin.income.adapter.ClientsListAdapter;
import com.gsbelarus.gedemin.income.sync.DataBaseHelper;
import com.gsbelarus.gedemin.lib.ui.ArgumentsHelper;
import com.gsbelarus.gedemin.lib.ui.fragment.ListFragmentModel;

import java.util.List;

/**
 * Клиент
 * (Меню - Поступления - Клиент,
 * Меню - Клиенты - Клиент,
 * Меню - Календарь - Месяц - Поступления - Клиент)
 * 1. На Action Bar располагается фильтр для выбора номера года. По умолчанию
 * открывается текущий год.
 * 2. В верху экрана выводится наименование клиента
 * 3. Таблица за выбранный год. Каждая запись таблицы один
 * месяц. Таблица
 * имеет две колонки: месяц, сумма. В колонке Сумма выводится фактическая
 * перечисленная сумма, плановая сумма и процент. Цвет фона записи
 * показывает соотношение факта к плану.
 * 4. Сортировка в хронологическом порядке.
 * 5. Тач по записи переводит на экран Движение по клиенту за месяц.
 */
public class ClientYearFrgm extends ListFragmentModel {

    /**
     * данные, полученные из БД, для вывода в list:
     * ClientsTable.id - месяц 1..12
     * ClientsTable.paidSum - оплаченная сумма за месяц
     * ClientsTable.planSum - плановая сумма за месяц
     */
    private List<ClientsTable> contacts;

    /**
     * Если нужно переопределяется в классе наследнике, возвращает id View заголовка
     */
    @Override
    public Integer getHeaderId() {
        return R.layout.header;
    }

    /**
     * Вызывается при создании View или при смене ориентации экрана.
     * Может быть переопределен в классе наследнике
     *
     * @param rootView корневое View
     */
    @Override
    public void onCreateViewFragment(View rootView) {
        super.onCreateViewFragment(rootView);

        TextView textSum = (TextView) rootView.findViewById(R.id.date_name);
        textSum.setText(String.valueOf(argumentsHelper.selectedYear));
    }

    /**
     * обработчик нажатия на элемент списка:
     * создается интент для запуска нового потока (activity) ClientMonth
     * для открытия формы Движение по клиенту за месяц.
     * В качестве параметров передаются выбранные год, месяц, ИД клиента, имя клиента
     */
    @Override
    public void onListItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        if (contacts.get(position).getId() == ClientsListAdapter.TOTAL_SUM)
            return;
        Intent intent = new Intent(getActivity(), ClientMonth.class);
        intent.putExtra(ArgumentsHelper.ID, argumentsHelper.id);
        intent.putExtra(ArgumentsHelper.SELECTED_MONTH, contacts.get(position).getId());
        intent.putExtra(ArgumentsHelper.SELECTED_YEAR, argumentsHelper.selectedYear);
        intent.putExtra(ArgumentsHelper.CLIENT_NAME, argumentsHelper.clientName);
        startActivity(intent);
    }

    /**
     * Чтение данных из БД в новом потоке
     */
    @Override
    public void readDataBase() {
        DataBaseHelper dbh = DataBaseHelper.getInstance(context);
        contacts = dbh.getClientItemList(argumentsHelper.id, argumentsHelper.selectedYear);
    }

    /**
     * Метод вызывается после чтения данных из БД или при смене ориентации экрана.
     * Может быть вызван до окончания выполнения потока для запроса данных из БД, поэтому следует проверять данные на null.
     * Служит для инициализации View данными
     *
     * @param rootView корневое View
     */
    @Override
    public void initView(View rootView) {
        if (contacts == null)
            return;
        ClientsListAdapter adapter = new ClientsListAdapter(context, contacts);
        list.setAdapter(adapter);
    }
}
